package com.zpark.controller;

import com.alibaba.fastjson.JSON;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.zpark.entity.User;
import com.zpark.util.JwtUtil;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;

/**
 * 任务：
 *      提供登录接口
 *      提供查询数据接口（返回用户的登录数据）
 *      查询数据接口的访问前置条件是用户必须登录
 *          添加拦截器，拦截没有登录的用户
 */
@RestController
public class JwtController {

    @PostMapping("/user_login")
    public String login(String uname, String pwd){
        // 模拟登录、完善用户数据，实际开发当中是从数据库查询数据
        User user = new User();
        user.setUname(uname);
        user.setId(99999);
        user.setPhone("15689897878");
        user.setPwd(pwd);
        user.setSex("男");

        // 生成token
        String token = JwtUtil.createToken(user);

        // 将token返回给前端
        return token;
    }


    @PostMapping("/get_data")
    public User getUserData(HttpServletRequest request){
        // 从请求头当中获取用户的token数据
        String token = request.getHeader("Authorization");
        // 从token当中解析数据
        DecodedJWT decodedJWT = JwtUtil.verifyToken(token);
        String userStr = decodedJWT.getClaim("user").asString();

        // 将json字符串转为User对象
        User user = JSON.parseObject(userStr, User.class);
        // 将数据返回
        return  user;
    }
}
